﻿using System;
using System.Web.Services;
using H3.BizBus;

namespace WebService
{
    /// <summary>
    /// WebService 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务，请取消注释以下行。 
    // [System.Web.Script.Services.ScriptService]
    public class WebService : System.Web.Services.WebService
    {
        /// <summary>
        /// 氚云端编写的 this.Engine.BizBus.Invoke 调用的就是本方法，也是推荐使用该方法来接收氚云端的请求
        /// </summary>
        /// <param name="userCode">调用时传入的用户Id，一般不使用</param>
        /// <param name="schemaCode">调用时传入的schemaCode，一般不使用</param>
        /// <param name="methodName">自定义的方法名，用于判断请求的业务</param>
        /// <param name="param">自定义的参数</param>
        /// <returns></returns>
        [WebMethod]
        public string Invoke(string userCode, string schemaCode, string methodName, string param)
        {
            //创建响应内容结构体对象
            string strSchemaJson = string.Empty;
            BizStructureSchema Schema = new BizStructureSchema();
            Schema.Code = "ResponseSchema";
            Schema.Add(new ItemSchema("IsSuccess", "执行结果", BizDataType.Bool));
            Schema.Add(new ItemSchema("ResponseContent", "响应内容", BizDataType.String, int.MaxValue, string.Empty));
            strSchemaJson = BizStructureUtility.SchemaToJson(Schema);

            //通过响应内容结构体对象生成响应内容对象
            BizStructureSchema returnSchema = null;
            string errorMessage = string.Empty;
            BizStructureUtility.JsonToSchema(strSchemaJson, out returnSchema, out errorMessage);
            BizStructure returnBizStructure = new BizStructure(returnSchema);//返回对象

            //返回数据
            int resultCode = 0; //初始化 全局返回状态码（0为成功，其他数值皆表示失败）
            string resultMsg = string.Empty; //初始化 全局返回信息

            try
            {
                /*
                 您只需在此处编写代码，其他的代码是为了构造出符合要求的响应数据，所以尽量不修改
                 请求处理
                 （此处建议把处理代码封装成类，或者封装在类库项目中，以减少本类代码量，导致阅读不便）

                 设置响应内容
                 returnBizStructure["IsSuccess"] = true;
                 returnBizStructure["ResponseContent"] = "成功处理完成";
                 或
                 returnBizStructure["IsSuccess"] = false;
                 returnBizStructure["ResponseContent"] = "业务无法处理";
                */

                returnBizStructure["IsSuccess"] = true;
                returnBizStructure["ResponseContent"] = "成功处理完成";
            }
            catch (Exception ex)
            {
                //发生未知异常时，响应异常信息
                resultCode = 1;
                resultMsg = ex.Message;
            }

            InvokeResult result = new InvokeResult(resultCode, resultMsg, returnBizStructure);
            string resultJson = BizStructureUtility.InvokeResultToJson(result);

            return resultJson;
        }

        /// <summary>
        /// 根据schemaCode获取结构
        /// 由于使用意义不大，基本不用
        /// 此方法请勿做任何修改和删除，氚云配置连接时会验证，改动后可能导致配置不上去
        /// </summary>
        /// <param name="schemaCode"></param>
        /// <returns></returns>
        [WebMethod]
        public string GetSchema(string schemaCode)
        {
            return string.Empty;
        }

        /// <summary>
        /// 获取所有结构
        /// 由于使用意义不大，基本不用
        /// 此方法请勿做任何修改和删除，氚云配置连接时会验证，改动后可能导致配置不上去
        /// </summary>
        /// <returns></returns>
        [WebMethod]
        public string GetSchemaList()
        {
            return string.Empty;
        }

        /// <summary>
        /// 批量获取数据
        /// 由于使用意义不大，基本不用
        /// 此方法请勿做任何修改和删除，氚云配置连接时会验证，改动后可能导致配置不上去
        /// </summary>
        /// <param name="userCode"></param>
        /// <param name="schemaCode"></param>
        /// <param name="filter"></param>
        /// <returns></returns>
        [WebMethod]
        public string GetList(string userCode, string schemaCode, string filter)
        {
            return string.Empty;
        }
    }
}
